#pragma once

#include <PureMVC/PureMVC.hpp>

using PureMVC::Interfaces::IFacade;
using PureMVC::Patterns::Facade;

/**
 * @brief 应用程序外观类，实现PureMVC框架的Facade模式
 * 负责协调命令、代理和中介者，是应用程序的核心控制器
 */
class AppFacade
    : public virtual IFacade
    , public Facade
{
    friend class Facade;

protected:
    AppFacade(void);
    ~AppFacade();

public:
    /**
     * @brief 获取AppFacade的单例实例
     * @return 返回AppFacade的引用
     */
    static AppFacade& getInstance(void);
    /**
     * @brief 启动应用程序
     * @param appView 应用程序视图指针
     */
    void startUp(void * appView);

protected:
    void initializeFacade(void);

private:
    /**
     * @brief 注册所有命令
     */
    void RegisterAllCommand();
};